﻿package com.amcharts.utils
{

    public class Dates extends Object
    {
        static const VERSION:String = "1.8.3.1";

        public function Dates()
        {
            return;
        }// end function

        public static function extractPeriod(param1:String) : Object
        {
            var _loc_2:* = Utils.stripNumbers(param1);
            var _loc_3:Number = 1;
            if (_loc_2 != param1)
            {
                _loc_3 = Number(param1.slice(0, param1.indexOf(_loc_2)));
            }
            return {period:_loc_2, count:_loc_3};
        }// end function

        public static function resetDateToMin(param1:Date, param2:String, param3:Number, param4:Number = 1) : Date
        {
            var _loc_5:Number = NaN;
            var _loc_6:Number = NaN;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_9:Number = NaN;
            var _loc_10:Number = NaN;
            var _loc_11:Number = NaN;
            var _loc_12:Number = NaN;
            switch(param2)
            {
                case "YYYY":
                {
                    _loc_5 = Math.floor(param1.getFullYear() / param3) * param3;
                    _loc_6 = 0;
                    _loc_7 = 1;
                    _loc_8 = 0;
                    _loc_9 = 0;
                    _loc_10 = 0;
                    _loc_11 = 0;
                    break;
                }
                case "MM":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = Math.floor(param1.getMonth() / param3) * param3;
                    _loc_7 = 1;
                    _loc_8 = 0;
                    _loc_9 = 0;
                    _loc_10 = 0;
                    _loc_11 = 0;
                    break;
                }
                case "WW":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = param1.getMonth();
                    _loc_12 = param1.getDay();
                    if (_loc_12 == 0)
                    {
                    }
                    if (param4 > 0)
                    {
                        _loc_12 = 7;
                    }
                    _loc_7 = param1.getDate() - _loc_12 + param4;
                    _loc_8 = 0;
                    _loc_9 = 0;
                    _loc_10 = 0;
                    _loc_11 = 0;
                    break;
                }
                case "DD":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = param1.getMonth();
                    _loc_7 = Math.floor(param1.getDate() / param3) * param3;
                    _loc_8 = 0;
                    _loc_9 = 0;
                    _loc_10 = 0;
                    _loc_11 = 0;
                    break;
                }
                case "hh":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = param1.getMonth();
                    _loc_7 = param1.getDate();
                    _loc_8 = Math.floor(param1.getHours() / param3) * param3;
                    _loc_9 = 0;
                    _loc_10 = 0;
                    _loc_11 = 0;
                    break;
                }
                case "mm":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = param1.getMonth();
                    _loc_7 = param1.getDate();
                    _loc_8 = param1.getHours();
                    _loc_9 = Math.floor(param1.getMinutes() / param3) * param3;
                    _loc_10 = 0;
                    _loc_11 = 0;
                    break;
                }
                case "ss":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = param1.getMonth();
                    _loc_7 = param1.getDate();
                    _loc_8 = param1.getHours();
                    _loc_9 = param1.getMinutes();
                    _loc_10 = Math.floor(param1.getSeconds() / param3) * param3;
                    _loc_11 = 0;
                    break;
                }
                case "fff":
                {
                    _loc_5 = param1.getFullYear();
                    _loc_6 = param1.getMonth();
                    _loc_7 = param1.getDate();
                    _loc_8 = param1.getHours();
                    _loc_9 = param1.getMinutes();
                    _loc_10 = param1.getSeconds();
                    _loc_11 = Math.floor(param1.getMilliseconds() / param3) * param3;
                    break;
                }
                default:
                {
                    break;
                }
            }
            param1 = new Date(_loc_5, _loc_6, _loc_7, _loc_8, _loc_9, _loc_10, _loc_11);
            return param1;
        }// end function

        public static function getPeriodDuration(param1:String, param2:Number = 1) : Number
        {
            var _loc_3:Number = NaN;
            switch(param1)
            {
                case "YYYY":
                {
                    _loc_3 = 31622400000;
                    break;
                }
                case "MM":
                {
                    _loc_3 = 2678400000;
                    break;
                }
                case "WW":
                {
                    _loc_3 = 604800000;
                    break;
                }
                case "DD":
                {
                    _loc_3 = 86400000;
                    break;
                }
                case "hh":
                {
                    _loc_3 = 3600000;
                    break;
                }
                case "mm":
                {
                    _loc_3 = 60000;
                    break;
                }
                case "ss":
                {
                    _loc_3 = 1000;
                    break;
                }
                case "fff":
                {
                    _loc_3 = 1;
                    break;
                }
                default:
                {
                    break;
                }
            }
            return _loc_3 * param2;
        }// end function

        public static function changeDate(param1:Date, param2:String, param3:Number, param4:Boolean = true, param5:Boolean = false) : Date
        {
            var _loc_6:Number = -1;
            if (param4 == true)
            {
                _loc_6 = 1;
            }
            switch(param2)
            {
                case "YYYY":
                {
                    param1.setFullYear(param1.getFullYear() + param3 * _loc_6);
                    if (!param4)
                    {
                    }
                    if (!param5)
                    {
                        param1.setDate((param1.getDate() + 1));
                    }
                    break;
                }
                case "MM":
                {
                    param1.setMonth(param1.getMonth() + param3 * _loc_6);
                    if (!param4)
                    {
                    }
                    if (!param5)
                    {
                        param1.setDate((param1.getDate() + 1));
                    }
                    break;
                }
                case "DD":
                {
                    param1.setDate(param1.getDate() + param3 * _loc_6);
                    break;
                }
                case "WW":
                {
                    param1.setDate(param1.getDate() + param3 * _loc_6 * 7 + 1);
                    break;
                }
                case "hh":
                {
                    param1.setHours(param1.getHours() + param3 * _loc_6);
                    break;
                }
                case "mm":
                {
                    param1.setMinutes(param1.getMinutes() + param3 * _loc_6);
                    break;
                }
                case "ss":
                {
                    param1.setSeconds(param1.getSeconds() + param3 * _loc_6);
                    break;
                }
                case "fff":
                {
                    param1.setMilliseconds(param1.getMilliseconds() + param3 * _loc_6);
                    break;
                }
                default:
                {
                    break;
                }
            }
            return param1;
        }// end function

    }
}
